#include <iostream>
#include <cstring>
#include <stack>

using namespace std;

const int maxn = 500 + 10;

int check(stack<char> &p, const char op2) { // 1.入栈 0. 出栈
    if (p.empty()) {
        return 1;
    }
    char op1 = p.top();
    if (op1 == '+' || op1 == '-') {
        if (op2 == '*' || op2 == '/') {
            return 1;
        } else {
            return 0;
        }
    } else if (op1 == '*' || op1 == '/') {
        if (op2 == '+' || op2 == '-') {
            return 0;
        } else {
            return 1;
        }
    }
    return 0;
}

int main() {
    char z[maxn];
    scanf("%s", z);
    int len = strlen(z);
    stack<char> p;
    char str[maxn] = {0};
    int book = 0;
    for (int i = 0; i < len; i++) {
        if (z[i] >= '0' && z[i] <= '9') {
            str[book] = z[i];
            book++;
        } else {
            while (check(p, z[i]) == 0) {
                str[book] = p.top();
                book++;
                p.pop();
            }
            p.push(z[i]);
        }
    }
    while (!p.empty()) {
        str[book] = p.top();
        p.pop();
        book++;
    }
    // 以上中缀转后缀
    printf("%s\n", str);
    // stack<int> tmp;
    // char a, b;
    // for (int i =0; i < book; i++)  {
    //     switch (str[i]) {
    //         case '+':
    //             a = tmp.top();
    //             tmp.top();
    //             b = tmp.top();
    //             tmp.pop();
    //             tmp.push(a + b);
    //             break;
    //         case '-':
    //
    //             break;
    //         case '*':
    //
    //             break;
    //         case '/':
    //
    //             break;
    //         default:
    //             tmp.push((str[i] - '0'));
    //     }
    // }
    // cout << tmp.top() << endl;
    return 0;
}
